package br.gov.mj.sislegis.app.rest; import java.io.Serializable; import javax.inject.Inject; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import br.gov.mj.sislegis.app.enumerated.Origem; import br.gov.mj.sislegis.app.model.Usuario; import br.gov.mj.sislegis.app.model.pautacomissao.AgendaComissao; import br.gov.mj.sislegis.app.rest.authentication.UsuarioAutenticadoBean; import br.gov.mj.sislegis.app.service.AgendaComissaoService; import br.gov.mj.sislegis.app.service.UsuarioService; /** * */ @Path("/agendacomissao") public class AgendaComissaoEndpoint { @Inject private AgendaComissaoService service; @Inject private UsuarioAutenticadoBean controleUsuarioAutenticado; @Inject private UsuarioService usuarioService; @POST @Path("/{casa}/{comissao}") public Response follow(@PathParam("casa") String casa, @PathParam("comissao") String comissao, @HeaderParam("Authorization") String authorization) { try { Usuario user = controleUsuarioAutenticado.carregaUsuarioAutenticado(authorization); service.followComissao(Origem.valueOf(casa), comissao, user); return Response.noContent().build(); } catch (Exception e) { e.printStackTrace(); return Response.status(Response.Status.BAD_REQUEST).build(); } } @DELETE @Path("/{casa}/{comissao}") public Response unfollow(@PathParam("casa") String casa, @PathParam("comissao") String comissao, @HeaderParam("Authorization") String authorization) { try { Usuario user = controleUsuarioAutenticado.carregaUsuarioAutenticado(authorization); service.unfollowComissao(Origem.valueOf(casa), comissao, user); return Response.noContent().build(); } catch (Exception e) { e.printStackTrace(); return Response.status(Response.Status.BAD_REQUEST).build(); } } @GET @Produces(MediaType.APPLICATION_JSON) public Response listAll(@HeaderParam("Authorization") String authorization) throws Exception { try { Usuario user = controleUsuarioAutenticado.carregaUsuarioAutenticado(authorization); user = usuarioService.loadComAgendasSeguidas(user.getId()); return Response.ok(user.getAgendasSeguidas()).build(); } catch (Exception e) { e.printStackTrace(); return Response.status(Response.Status.BAD_REQUEST).build(); } } @GET @Path("/{casa}/{comissao}") @Produces(MediaType.APPLICATION_JSON) public Response getAgendaComissao(@PathParam("casa") String casa, @PathParam("comissao") String comissao, @HeaderParam("Authorization") String authorization) throws Exception { try { Usuario user = controleUsuarioAutenticado.carregaUsuarioAutenticado(authorization); AgendaComissao agenda = service.getAgenda(Origem.valueOf(casa), comissao.trim(), true); if (agenda == null) { return Response.noContent().build(); } else { user = usuarioService.loadComAgendasSeguidas(user.getId()); boolean seguindo = user.getAgendasSeguidas().contains(agenda); DetalhesAgendaComissao detalhes = new DetalhesAgendaComissao(agenda, seguindo); return Response.ok(detalhes).build(); } } catch (Exception e) { e.printStackTrace(); return Response.status(Response.Status.BAD_REQUEST).build(); } } class DetalhesAgendaComissao implements Serializable { /** * */ private static final long serialVersionUID = -5000997074521269387L; public DetalhesAgendaComissao(AgendaComissao agenda2, boolean seguindo) { this.agenda = agenda2; this.seguindo = seguindo; } public AgendaComissao getAgenda() { return agenda; } public boolean isSeguindo() { return seguindo; } AgendaComissao agenda; boolean seguindo = false; } }